%%%-------------------------------------------------------------------
%%% @author liuwentao
%%% @doc
%%%
%%% @end
%%% Created : 24. 5月 2021 14:13
%%%-------------------------------------------------------------------
-author("liuwentao").


%% 按固定格式输出普通信息到控制台
-define(INFO(Msg), logger:info(Msg, [], ?MODULE, ?LINE)).
-define(INFO(F, A), logger:info(F, A, ?MODULE, ?LINE)).

%% 按固定格式输出普通信息到控制台
-define(ERR(Msg), logger:error(Msg, [], ?MODULE, ?LINE)).
-define(ERR(F, A), logger:error(F, A, ?MODULE, ?LINE)).

%% 按固定格式输出普通信息到控制台
-define(DEBUG(Msg), logger:debug(Msg, [], ?MODULE, ?LINE)).
-define(DEBUG(F, A), logger:debug(F, A, ?MODULE, ?LINE)).

%% 返回格式化字符串，等价于io_lib:format/2
-define(S(F, A), io_lib:format(F, A)).



-ifdef(lwt).
-define(LWT_DEBUG(Msg), logger:debug(Msg, [], ?MODULE, ?LINE)).
-define(LWT_DEBUG(F, A), logger:debug(F, A, ?MODULE, ?LINE)).
-else.
-define(LWT_DEBUG(Msg), ok).
-define(LWT_DEBUG(F, A), ok).
-endif.


-define(true, 1).
-define(false, 0).
-define(undefined, undefined).


%% 将record转换成tuplelist
-define(record_to_tuplelist(Rec, Ref), lists:zip([record_name | record_info(fields, Rec)], tuple_to_list(Ref))).

%% 代码文件目录
-define(code_path, util:get_patch()).

%% 打印
-define(T(Text), Text).



%% 数据库连接名称
-define(DB, mysql_conn_pool).

%% call 进程
-define(CALL(_Call_Pid, _Call_Request, _Time_Out),
    case catch gen_server:call(_Call_Pid, _Call_Request, _Time_Out) of
        {'EXIT', {timeout, _}} -> {error, timeout};
        {'EXIT', {noproc, _}} -> {error, noproc};
        {'EXIT', {normal, _}} -> {error, exit};
        {'EXIT', _Call_Err} -> {error, _Call_Err};
        _Call_Return -> _Call_Return
    end).
-define(CALL(_Call_Pid, _Call_Request), ?CALL(_Call_Pid, _Call_Request, 10000)).

%% gen_server:call和gen_server:cast缩写
-define(lgs_call(Request), gen_server:call(?MODULE, Request)).
-define(lgs_cast(Request), gen_server:cast(?MODULE, Request)).
-define(lgs_send(Request), erlang:send(?MODULE, Request)).
-define(ggs_call(Request), gen_server:call({global, ?MODULE}, Request)).
-define(ggs_cast(Request), gen_server:cast({global, ?MODULE}, Request)).
-define(ggs_send(Request), global:send(?MODULE, Request)).
-define(gs_call(Dest, Request), gen_server:call(Dest, Request)).
-define(gs_cast(Dest, Request), gen_server:cast(Dest, Request)).
-define(gs_send(Dest, Request), erlang:send(Dest, Request)).

-define(db_lookup(Tab, Key), case catch ets:lookup(Tab, Key) of [Obj] -> Obj; [] -> none; _ -> false end).
-define(db_set(Tab, Data), case catch ets:insert(Tab, Data) of true -> ok; _ -> false end).
-define(db_unset(Tab, Key), case catch ets:delete(Tab, Key) of true -> ok; _ -> false end).
-define(db_save(Tab, Data), case catch dets:insert(Tab, Data) of ok -> ok; _ -> false end).
-define(db_delete(Tab, Key), case catch dets:delete(Tab, Key) of ok -> ok; _ -> false end).


-define(iif(A,B,C), case A of true ->B; _ ->C end).